package com.alpha.eceasy.mall.api.constant;

import com.alpha.eceasy.exception.BizException;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 订单状态枚举
 */
@Getter
public enum OrderStatus {
	/**
	 * 已取消
	 */
	CANCEL(0),
    /**
     * 待支付
     */
    UNPAID(1),
    /**
     * 已支付，待发货
     */
    PAID(2),
    /**
     * 已发货，待收货
     */
    SHIPPED(3),
    /**
     * 已收货，待评价
     */
    RECEIVED(4),
    /**
     * 已评价，订单结束（正向流程结束）
     */
    COMPLETED(5),
    /**
     * 退款审核中
     */
	REFUND_AUDIT(6),
	/**
	 * 已退款
	 */
	REFUND(7),
	/**
	 * 退款失败
	 */
	REFUND_FAILURE(8),
	/**
	 * 退款关闭订单
	 */
	RETURN_GOODS_CLOSE(9),
	/**
	 * 订单异常
	 */
	ORDER_ANOMALY(10),;

    @EnumValue
    private final Integer code;

    OrderStatus(Integer code) {
        this.code = code;
    }

    public static OrderStatus valueFromCode(Integer code){
		Optional<OrderStatus> first = Arrays.stream(values()).filter(item -> item.getCode().equals(code)).findFirst();
		return first.orElseThrow(BizException::new);
    }
}
